多参数的解析
有了上述重载解析规则之后,我们就可以保证:当所涉及到的不同类型在计算效率或者精度方面存在明显差异时,被调用将会是最简单的算法(函数)。例如,
int pow(int, int);
double pow(double, double);
complex pow(double, complex);
complex pow(complex, int);
complex pow(complex, double);
complex pow(complex, complex);
void k(complex z)
{
int i = pow(2, 2); // 调用pow(int, int)
double d = pow(2.0, 2.0); // 调用pow(double, double)
complex z2 = pow(2, z); // 调用pow(double, complex)
complex z3 = pow(z, 2); // 调用pow(complex, int)
complex z4 = pow(z, z); // 调用pow(complex, complex)
}
如果选择过程牵涉到两个或者更多的参数,那么将根据7.4节的规则为每个参数找到最佳匹配。如果有一个函数在某个参数上具有最佳的匹配,而在其他参数的匹配上都优于或者等于其他可能被调用的函数,那么它就会被调用。如果没有这样的函数,这个调用将被看做有歧义而予以拒绝。例如,
void g()
{
double d = pow(2.0, 2); // 错误❌:pow(int(2.0), 2)或pow(2.0, double(2))?
}
这个调用具有歧义性,因为对2.0的最佳匹配是pow(double, double),而对2的最佳匹配却是pow(int, int)。
🔚